package cn.iocoder.yudao.module.system.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * 测评系统配置属性
 *
 * @author 芋道源码
 */
@Component
@ConfigurationProperties(prefix = "yudao.exam-test")
@Data
public class ExamTestProperties {

    /**
     * 便捷数据网API基础URL
     */
    private String baseUrl = "https://php.bian-jie.cn/interface/bjsj/api/exam";

    /**
     * 不同测评类型对应的API密钥
     * 霍兰德高考志愿倾向测试 tbl=HLDZY
     * 职业定位测试(职业锚) tbl=zhiYeDingWei
     * 霍兰德职业兴趣测试 tbl=HLD
     * MBTI职业性格测试完美版 tbl=MBTI4
     */
    private Map<String, String> appKeys = new HashMap<String, String>() {{
        put("HLDZY", "hshxfnfofjfqfkfhfthxhyhxfgfqfxfqhxhohxfyfxfkfogvfihxhyhghghfhqhghhhohxftfgfshxhyhxgpgsgigcgbhxhohxfhfjfifkhxhyhxgufphphigdgjgthifegmhxhu");
        put("zhiYeDingWei", "hshxfnfofjfqfkfhfthxhyhxfgfqfxfqhxhohxfyfxfkfogvfihxhyhghghfhqhghhhohxftfgfshxhyhxfcfpfvgbfkgifvfwfdgefkfvhxhohxfhfjfifkhxhyhxgcglgggdgohpg{fjfffnhxhu");
        put("HLD", "hshxfnfofjfqfkfhfthxhyhxfgfqfxfqhxhohxfyfxfkfogvfihxhyhghghfhqhghhhohxftfgfshxhyhxgpgsgihxhohxfhfjfifkhxhyhxgdhlhffchvgugmfzfshlhxhu");
        put("MBTI4", "hshxfnfofjfqfkfhfthxhyhxfgfqfxfqhxhohxfyfxfkfogvfihxhyhghghfhqhghhhohxftfgfshxhyhxgugggtgvhkhxhohxfhfjfifkhxhyhxfjhggpfhfyfxfbg{fdfohxhu");
    }};

    /**
     * 默认API密钥（用于兼容性，当找不到对应tbl的key时使用）
     */
    private String defaultAppKey = "hshxfnfofjfqfkfhfthxhyhxfgfqfxfqhxhohxfyfxfkfogvfihxhyhghghfhqhghhhohxftfgfshxhyhxgugggtgvhkhxhohxfhfjfifkhxhyhxfjhggpfhfyfxfbg{fdfohxhu";

    /**
     * API请求超时时间（毫秒）
     */
    private Integer timeout = 30000;

    /**
     * 是否启用缓存
     */
    private Boolean cacheEnabled = true;

    /**
     * 缓存过期时间（秒）
     */
    private Integer cacheExpireTime = 3600;

    /**
     * 根据测评类型获取对应的API密钥
     *
     * @param tbl 测评类型标记值
     * @return 对应的API密钥，如果找不到则返回默认密钥
     */
    public String getAppKeyByTbl(String tbl) {
        if (tbl == null || tbl.trim().isEmpty()) {
            return defaultAppKey;
        }
        return appKeys.getOrDefault(tbl.trim(), defaultAppKey);
    }

}
